{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 基于葡萄酒数据进行葡萄酒质量预测模型构建，使用Softmax算法构建模型，并获取Softmax算法构建的模型效果(注意：分成11类)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "import warnings\n",
    "import sklearn\n",
    "from sklearn.linear_model import LogisticRegressionCV\n",
    "from sklearn.linear_model.coordinate_descent import ConvergenceWarning\n",
    "from sklearn.cross_validation import train_test_split\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "from sklearn.preprocessing import label_binarize\n",
    "from sklearn import metrics"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "## 设置字符集，防止中文乱码\n",
    "mpl.rcParams['font.sans-serif']=[u'simHei']\n",
    "mpl.rcParams['axes.unicode_minus']=False\n",
    "## 拦截异常\n",
    "warnings.filterwarnings(action = 'ignore', category=ConvergenceWarning)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>fixed acidity</th>\n",
       "      <th>volatile acidity</th>\n",
       "      <th>citric acid</th>\n",
       "      <th>residual sugar</th>\n",
       "      <th>chlorides</th>\n",
       "      <th>free sulfur dioxide</th>\n",
       "      <th>total sulfur dioxide</th>\n",
       "      <th>density</th>\n",
       "      <th>pH</th>\n",
       "      <th>sulphates</th>\n",
       "      <th>alcohol</th>\n",
       "      <th>quality</th>\n",
       "      <th>type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>7.4</td>\n",
       "      <td>0.70</td>\n",
       "      <td>0.00</td>\n",
       "      <td>1.9</td>\n",
       "      <td>0.076</td>\n",
       "      <td>11.0</td>\n",
       "      <td>34.0</td>\n",
       "      <td>0.9978</td>\n",
       "      <td>3.51</td>\n",
       "      <td>0.56</td>\n",
       "      <td>9.4</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>7.8</td>\n",
       "      <td>0.88</td>\n",
       "      <td>0.00</td>\n",
       "      <td>2.6</td>\n",
       "      <td>0.098</td>\n",
       "      <td>25.0</td>\n",
       "      <td>67.0</td>\n",
       "      <td>0.9968</td>\n",
       "      <td>3.20</td>\n",
       "      <td>0.68</td>\n",
       "      <td>9.8</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>7.8</td>\n",
       "      <td>0.76</td>\n",
       "      <td>0.04</td>\n",
       "      <td>2.3</td>\n",
       "      <td>0.092</td>\n",
       "      <td>15.0</td>\n",
       "      <td>54.0</td>\n",
       "      <td>0.9970</td>\n",
       "      <td>3.26</td>\n",
       "      <td>0.65</td>\n",
       "      <td>9.8</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>11.2</td>\n",
       "      <td>0.28</td>\n",
       "      <td>0.56</td>\n",
       "      <td>1.9</td>\n",
       "      <td>0.075</td>\n",
       "      <td>17.0</td>\n",
       "      <td>60.0</td>\n",
       "      <td>0.9980</td>\n",
       "      <td>3.16</td>\n",
       "      <td>0.58</td>\n",
       "      <td>9.8</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>7.4</td>\n",
       "      <td>0.70</td>\n",
       "      <td>0.00</td>\n",
       "      <td>1.9</td>\n",
       "      <td>0.076</td>\n",
       "      <td>11.0</td>\n",
       "      <td>34.0</td>\n",
       "      <td>0.9978</td>\n",
       "      <td>3.51</td>\n",
       "      <td>0.56</td>\n",
       "      <td>9.4</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   fixed acidity  volatile acidity  citric acid  residual sugar  chlorides  \\\n",
       "0            7.4              0.70         0.00             1.9      0.076   \n",
       "1            7.8              0.88         0.00             2.6      0.098   \n",
       "2            7.8              0.76         0.04             2.3      0.092   \n",
       "3           11.2              0.28         0.56             1.9      0.075   \n",
       "4            7.4              0.70         0.00             1.9      0.076   \n",
       "\n",
       "   free sulfur dioxide  total sulfur dioxide  density    pH  sulphates  \\\n",
       "0                 11.0                  34.0   0.9978  3.51       0.56   \n",
       "1                 25.0                  67.0   0.9968  3.20       0.68   \n",
       "2                 15.0                  54.0   0.9970  3.26       0.65   \n",
       "3                 17.0                  60.0   0.9980  3.16       0.58   \n",
       "4                 11.0                  34.0   0.9978  3.51       0.56   \n",
       "\n",
       "   alcohol  quality  type  \n",
       "0      9.4        5     1  \n",
       "1      9.8        5     1  \n",
       "2      9.8        5     1  \n",
       "3      9.8        6     1  \n",
       "4      9.4        5     1  "
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "## 读取数据\n",
    "path1 = \"datas/winequality-red.csv\"\n",
    "df1 = pd.read_csv(path1, sep=\";\")\n",
    "df1['type'] = 1 # 设置数据类型为红葡萄酒\n",
    "\n",
    "path2 = \"datas/winequality-white.csv\"\n",
    "df2 = pd.read_csv(path2, sep=\";\")\n",
    "df2['type'] = 2 # 设置数据类型为白葡萄酒\n",
    "\n",
    "# 合并两个df\n",
    "df = pd.concat([df1,df2], axis=0)\n",
    "\n",
    "## 自变量名称\n",
    "names = [\"fixed acidity\",\"volatile acidity\",\"citric acid\",\n",
    "         \"residual sugar\",\"chlorides\",\"free sulfur dioxide\",\n",
    "         \"total sulfur dioxide\",\"density\",\"pH\",\"sulphates\",\n",
    "         \"alcohol\", \"type\"]\n",
    "## 因变量名称\n",
    "quality = \"quality\"\n",
    "\n",
    "## 显示\n",
    "df.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "原始数据条数:6497；异常数据处理后数据条数:6497；异常数据条数:0\n"
     ]
    }
   ],
   "source": [
    "## 异常数据处理\n",
    "new_df = df.replace('?', np.nan)\n",
    "datas = new_df.dropna(how = 'any') # 只要有列为空，就进行删除操作\n",
    "print(\"原始数据条数:%d；异常数据处理后数据条数:%d；异常数据条数:%d\" % (len(df), len(datas), len(df) - len(datas)))\n",
    "\n",
    "## 提取自变量和因变量\n",
    "X = datas[names]\n",
    "Y = datas[quality]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练数据条数:6334；数据特征个数:12；测试数据条数:163\n"
     ]
    }
   ],
   "source": [
    "## 数据分割\n",
    "X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_size=0.025,random_state=0)\n",
    "\n",
    "print(\"训练数据条数:%d；数据特征个数:%d；测试数据条数:%d\" % (X_train.shape[0], X_train.shape[1], X_test.shape[0]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "      fixed acidity  volatile acidity  citric acid  residual sugar  chlorides  \\\n",
      "2857            6.6             0.290         0.31            3.90      0.027   \n",
      "4092            6.4             0.500         0.20            2.40      0.059   \n",
      "3089            6.2             0.360         0.38            3.20      0.031   \n",
      "2250            9.2             0.340         0.54           17.30      0.060   \n",
      "3478            6.2             0.360         0.45           10.40      0.060   \n",
      "1626            9.0             0.220         0.49           10.40      0.048   \n",
      "471             6.5             0.380         0.34            3.40      0.036   \n",
      "930             7.7             0.170         0.52            5.90      0.017   \n",
      "880             9.2             0.560         0.18            1.60      0.078   \n",
      "3993            6.7             0.280         0.34            8.90      0.048   \n",
      "2786            8.0             0.300         0.36           11.00      0.034   \n",
      "4322            7.4             0.160         0.33            1.20      0.042   \n",
      "4597            6.7             0.660         0.00           13.00      0.033   \n",
      "1467            6.7             1.040         0.08            2.30      0.067   \n",
      "1051            6.9             0.210         0.81            1.10      0.137   \n",
      "533            10.3             0.270         0.24            2.10      0.072   \n",
      "2988            7.2             0.190         0.31            6.30      0.034   \n",
      "1189            8.8             0.955         0.05            1.80      0.075   \n",
      "3471            6.8             0.190         0.40            9.85      0.055   \n",
      "1983            7.6             0.200         0.30           14.20      0.056   \n",
      "3389            6.6             0.240         0.30           11.30      0.026   \n",
      "1519            8.3             0.200         0.49            1.70      0.040   \n",
      "1524            6.0             0.420         0.19            2.00      0.075   \n",
      "528             8.2             0.420         0.49            2.60      0.084   \n",
      "4585            5.0             0.330         0.23           11.80      0.030   \n",
      "42              7.5             0.490         0.20            2.60      0.332   \n",
      "2333            6.8             0.370         0.28            1.90      0.024   \n",
      "3098            5.1             0.330         0.27            6.70      0.022   \n",
      "2603            6.7             0.300         0.29            2.80      0.025   \n",
      "1812            5.6             0.460         0.24            4.80      0.042   \n",
      "...             ...               ...          ...             ...        ...   \n",
      "99              8.1             0.545         0.18            1.90      0.080   \n",
      "897             7.0             0.290         0.26            1.60      0.044   \n",
      "272             5.8             0.250         0.26           13.10      0.051   \n",
      "447             6.5             0.410         0.24           14.00      0.048   \n",
      "3252            7.1             0.260         0.37            5.50      0.025   \n",
      "3473            6.5             0.300         0.27            4.00      0.038   \n",
      "564             6.8             0.510         0.30            4.20      0.066   \n",
      "4437            6.5             0.290         0.30            9.15      0.051   \n",
      "4617            5.2             0.500         0.18            2.00      0.036   \n",
      "1294            6.9             0.410         0.22            4.20      0.031   \n",
      "537             8.1             0.825         0.24            2.10      0.084   \n",
      "102             6.0             0.210         0.24           12.10      0.050   \n",
      "1298            7.3             0.340         0.39            5.20      0.040   \n",
      "623             7.2             0.240         0.34            1.10      0.045   \n",
      "536             7.9             0.345         0.51           15.30      0.047   \n",
      "1000            8.0             0.190         0.36            1.80      0.050   \n",
      "705             8.4             1.035         0.15            6.00      0.073   \n",
      "4859            6.0             0.430         0.34            7.60      0.045   \n",
      "1869            8.2             0.180         0.28            8.50      0.035   \n",
      "4325            6.4             0.240         0.26            8.20      0.054   \n",
      "4275            5.7             0.220         0.20           16.00      0.044   \n",
      "2774            7.0             0.360         0.32           10.05      0.045   \n",
      "1033            7.5             0.570         0.08            2.60      0.089   \n",
      "4228            6.2             0.290         0.23           12.40      0.048   \n",
      "3260            7.4             0.190         0.31           14.50      0.045   \n",
      "3332            6.5             0.220         0.28            3.70      0.059   \n",
      "1665            6.5             0.130         0.37            1.00      0.036   \n",
      "54              6.8             0.200         0.59            0.90      0.147   \n",
      "1008            6.6             0.220         0.37            1.20      0.059   \n",
      "1133            8.7             0.220         0.42            2.30      0.053   \n",
      "\n",
      "      free sulfur dioxide  total sulfur dioxide  density    pH  sulphates  \\\n",
      "2857                 39.0                  96.0  0.99035  3.24       0.60   \n",
      "4092                 19.0                 112.0  0.99314  3.18       0.40   \n",
      "3089                 20.0                  89.0  0.98956  3.06       0.33   \n",
      "2250                 46.0                 235.0  1.00182  3.08       0.61   \n",
      "3478                 22.0                 184.0  0.99711  3.31       0.56   \n",
      "1626                 52.0                 195.0  0.99870  3.31       0.44   \n",
      "471                  34.0                 200.0  0.99370  3.14       0.76   \n",
      "930                  21.0                  84.0  0.99290  3.14       0.40   \n",
      "880                  10.0                  21.0  0.99576  3.15       0.49   \n",
      "3993                 32.0                 111.0  0.99455  3.25       0.54   \n",
      "2786                  8.0                  70.0  0.99354  3.05       0.41   \n",
      "4322                 47.0                 121.0  0.99198  3.04       0.68   \n",
      "4597                 32.0                  75.0  0.99551  3.15       0.50   \n",
      "1467                 19.0                  32.0  0.99648  3.52       0.57   \n",
      "1051                 52.0                 123.0  0.99320  3.03       0.39   \n",
      "533                  15.0                  33.0  0.99560  3.22       0.66   \n",
      "2988                 17.0                 103.0  0.99305  3.15       0.52   \n",
      "1189                  5.0                  19.0  0.99616  3.30       0.44   \n",
      "3471                 41.0                 103.0  0.99532  2.98       0.56   \n",
      "1983                 53.0                 212.5  0.99900  3.14       0.46   \n",
      "3389                 11.0                  77.0  0.99381  3.13       0.55   \n",
      "1519                 34.0                 169.0  0.99380  3.05       0.37   \n",
      "1524                 22.0                  47.0  0.99522  3.39       0.78   \n",
      "528                  32.0                  55.0  0.99880  3.34       0.75   \n",
      "4585                 23.0                 158.0  0.99322  3.41       0.64   \n",
      "42                    8.0                  14.0  0.99680  3.21       0.90   \n",
      "2333                 64.0                 106.0  0.98993  3.45       0.60   \n",
      "3098                 44.0                 129.0  0.99221  3.36       0.39   \n",
      "2603                 37.0                 107.0  0.99159  3.31       0.63   \n",
      "1812                 24.0                  72.0  0.99080  3.29       0.37   \n",
      "...                   ...                   ...      ...   ...        ...   \n",
      "99                   13.0                  35.0  0.99720  3.30       0.59   \n",
      "897                  12.0                  87.0  0.99230  3.08       0.46   \n",
      "272                  44.0                 148.0  0.99720  3.29       0.38   \n",
      "447                  24.0                 113.0  0.99820  3.44       0.53   \n",
      "3252                 31.0                 105.0  0.99082  3.06       0.33   \n",
      "3473                 37.0                  97.0  0.99026  3.20       0.60   \n",
      "564                  38.0                 165.0  0.99450  3.20       0.42   \n",
      "4437                 25.0                 166.0  0.99339  3.24       0.56   \n",
      "4617                 23.0                 129.0  0.98949  3.36       0.77   \n",
      "1294                 10.0                 102.0  0.99300  3.00       0.86   \n",
      "537                   5.0                  13.0  0.99720  3.37       0.77   \n",
      "102                  55.0                 164.0  0.99700  3.34       0.39   \n",
      "1298                 45.0                 163.0  0.99250  3.30       0.47   \n",
      "623                   3.0                  64.0  0.99130  3.23       0.51   \n",
      "536                  54.0                 171.0  0.99870  3.09       0.51   \n",
      "1000                 16.0                  84.0  0.99360  3.15       0.45   \n",
      "705                  11.0                  54.0  0.99900  3.37       0.49   \n",
      "4859                 25.0                 118.0  0.99222  3.03       0.37   \n",
      "1869                 41.0                 140.0  0.99520  3.04       0.37   \n",
      "4325                 47.0                 182.0  0.99538  3.12       0.50   \n",
      "4275                 41.0                 113.0  0.99862  3.22       0.46   \n",
      "2774                 37.0                 131.0  0.99352  3.09       0.33   \n",
      "1033                 14.0                  27.0  0.99592  3.30       0.59   \n",
      "4228                 33.0                 201.0  0.99612  3.11       0.56   \n",
      "3260                 39.0                 193.0  0.99860  3.10       0.50   \n",
      "3332                 29.0                 151.0  0.99177  3.23       0.41   \n",
      "1665                 48.0                 114.0  0.99110  3.41       0.51   \n",
      "54                   38.0                 132.0  0.99300  3.05       0.38   \n",
      "1008                 45.0                 199.0  0.99300  3.37       0.55   \n",
      "1133                 27.0                 114.0  0.99400  2.99       0.43   \n",
      "\n",
      "      alcohol  type  \n",
      "2857    12.60     2  \n",
      "4092     9.20     2  \n",
      "3089    12.00     2  \n",
      "2250     8.80     2  \n",
      "3478     9.80     2  \n",
      "1626    10.20     2  \n",
      "471     10.00     2  \n",
      "930     11.90     2  \n",
      "880      9.90     1  \n",
      "3993    11.00     2  \n",
      "2786    12.20     2  \n",
      "4322    10.50     2  \n",
      "4597    10.70     2  \n",
      "1467    11.00     1  \n",
      "1051     9.20     2  \n",
      "533     12.80     1  \n",
      "2988    11.40     2  \n",
      "1189     9.60     1  \n",
      "3471    10.50     2  \n",
      "1983     8.90     2  \n",
      "3389    12.80     2  \n",
      "1519    10.10     2  \n",
      "1524    10.00     1  \n",
      "528      8.70     1  \n",
      "4585    11.80     2  \n",
      "42      10.50     1  \n",
      "2333    12.60     2  \n",
      "3098    11.00     2  \n",
      "2603    11.30     2  \n",
      "1812    12.60     2  \n",
      "...       ...   ...  \n",
      "99       9.00     1  \n",
      "897     10.50     2  \n",
      "272      9.30     2  \n",
      "447      9.80     2  \n",
      "3252    12.60     2  \n",
      "3473    12.60     2  \n",
      "564      9.10     2  \n",
      "4437    11.35     2  \n",
      "4617    13.40     2  \n",
      "1294    11.60     2  \n",
      "537     10.70     1  \n",
      "102      9.40     2  \n",
      "1298    12.40     2  \n",
      "623     11.40     2  \n",
      "536      9.10     2  \n",
      "1000     9.80     2  \n",
      "705      9.90     1  \n",
      "4859    11.00     2  \n",
      "1869    10.10     2  \n",
      "4325     9.50     2  \n",
      "4275     8.90     2  \n",
      "2774    11.70     2  \n",
      "1033    10.40     1  \n",
      "4228     9.90     2  \n",
      "3260     9.20     2  \n",
      "3332    12.10     2  \n",
      "1665    11.50     2  \n",
      "54       9.10     2  \n",
      "1008    10.30     2  \n",
      "1133    10.00     2  \n",
      "\n",
      "[6334 rows x 12 columns]\n"
     ]
    }
   ],
   "source": [
    "# 2. 数据格式化(归一化)\n",
    "print(X_train)\n",
    "ss = MinMaxScaler()\n",
    "X_train = ss.fit_transform(X_train) ## 训练模型及归一化数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 0.23140496  0.14        0.18674699 ...,  0.21348315  0.66666667  1.        ]\n",
      " [ 0.21487603  0.28        0.12048193 ...,  0.1011236   0.17391304  1.        ]\n",
      " [ 0.19834711  0.18666667  0.22891566 ...,  0.06179775  0.57971014  1.        ]\n",
      " ..., \n",
      " [ 0.24793388  0.08        0.35542169 ...,  0.08988764  0.15942029  1.        ]\n",
      " [ 0.23140496  0.09333333  0.22289157 ...,  0.18539326  0.33333333  1.        ]\n",
      " [ 0.40495868  0.09333333  0.25301205 ...,  0.11797753  0.28985507  1.        ]]\n"
     ]
    }
   ],
   "source": [
    "print(X_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegressionCV(Cs=array([  1.00000e-05,   1.14976e-05, ...,   8.69749e+00,   1.00000e+01]),\n",
       "           class_weight=None, cv=None, dual=False, fit_intercept=True,\n",
       "           intercept_scaling=1.0, max_iter=100, multi_class='multinomial',\n",
       "           n_jobs=1, penalty='l2', random_state=None, refit=True,\n",
       "           scoring=None, solver='lbfgs', tol=0.0001, verbose=0)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 3. 模型构建及训练\n",
    "## penalty: 过拟合解决参数,l1或者l2\n",
    "\n",
    "## solver: 参数优化方式\n",
    "### 当penalty为l1的时候，参数只能是：liblinear(坐标轴下降法)；\n",
    "### 当penalty为l2的时候，参数可以是：lbfgs(拟牛顿法)、newton-cg(牛顿法变种)\n",
    "\n",
    "## multi_class: 分类方式参数；参数可选: ovr(默认)、multinomial；这两种方式在二元分类问题中，效果是一样的；在多元分类问题中，效果不一样\n",
    "### ovr: one-vs-rest， 对于多元分类的问题，先将其看做二元分类，分类完成后，再迭代对其中一类继续进行二元分类\n",
    "### multinomial: many-vs-many（MVM）,对于多元分类问题，如果模型有T类，我们每次在所有的T类样本里面选择两类样本出来，\n",
    "#### 不妨记为T1类和T2类，把所有的输出为T1和T2的样本放在一起，把T1作为正例，T2作为负例，\n",
    "#### 进行二元逻辑回归，得到模型参数。我们一共需要T(T-1)/2次分类\n",
    "\n",
    "## class_weight: 特征权重参数\n",
    "lr = LogisticRegressionCV(fit_intercept=True, Cs=np.logspace(-5, 1, 100), \n",
    "                          multi_class='multinomial', penalty='l2', solver='lbfgs')\n",
    "lr.fit(X_train, Y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "R值： 0.545468898011\n",
      "特征稀疏化比率：0.00%\n",
      "参数： [[ 3.79574242  6.67554806 -1.19476941 -1.2023249   3.55235826  4.02119547\n",
      "   1.85911245  0.11502101  1.3471271  -2.27787389 -2.33800449  0.45907989]\n",
      " [ 0.52088075  7.01259868 -0.42757585 -4.63336187  1.15580238 -8.45908736\n",
      "  -1.15868039  1.27926735  0.05304323 -0.9550173  -4.3614135   2.09762271]\n",
      " [-2.36034113  2.06307355  0.74506968 -3.60786673  0.72172594 -2.80558296\n",
      "   2.48383012  2.52137325 -1.82350373 -2.15775315 -5.38377218 -1.1555748 ]\n",
      " [-2.43688456 -3.6631658  -0.07604303 -0.22186009  0.29757977  0.47444466\n",
      "  -0.23455771  2.65128735 -1.45039681  0.57095324  0.06483853 -1.13937649]\n",
      " [ 0.67568013 -6.93985411 -0.39558717  5.11877472 -3.72054173  2.03066529\n",
      "  -1.35244029 -4.77897141  0.34335662  3.45228433  3.32850998 -1.18251933]\n",
      " [-1.3043647  -4.84479077  0.44363922  4.80613258 -1.25709009  4.53549043\n",
      "  -1.18438528 -1.03500623 -0.04861786  1.8662242   5.41097159 -0.40071788]\n",
      " [ 1.10928709 -0.3034096   0.90526656 -0.25949371 -0.74983452  0.20287447\n",
      "  -0.41287889 -0.75297133  1.57899146 -0.49881743  3.27887008  1.32148591]]\n",
      "截距： [-4.76746174 -0.0714511   5.89896371  5.13620751  2.23469252 -1.60066251\n",
      " -6.83028839]\n"
     ]
    }
   ],
   "source": [
    "# 4. 模型效果获取\n",
    "r = lr.score(X_train, Y_train)\n",
    "print \"R值：\", r\n",
    "print \"特征稀疏化比率：%.2f%%\" % (np.mean(lr.coef_.ravel() == 0) * 100)\n",
    "print \"参数：\",lr.coef_\n",
    "print \"截距：\",lr.intercept_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 数据预测\n",
    "## a. 预测数据格式化(归一化)\n",
    "X_test = ss.transform(X_test) # 使用模型进行归一化操作\n",
    "## b. 结果数据预测\n",
    "Y_predict = lr.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nRO7HeU6e5q4xxrHqOrYdVWY+Mr694h6iY8eO4aWXXsLVq1fRtm1bbN++HSF2nlhRKe4hesCf2kFE\nEnCek6fxKXMVj21HldkDPr4fqHuIEhMTce7cOeTn52Pv3r12k6FKIySkeBBNm2b+XPdp07x+cBGR\nRJzn5GnuGmMcq65j21Fl5iPj2yvOEDmrUpwhIiIiIiIij3mgzhARERERERFVBCZERERERETks5gQ\nERERERGRz2JCREREREREPosJERERERER+SwmRERERERE5LOYEBERERERkc9iQkRERERERD6LCRER\nEREREfksJkREREREROSzmBAREREREZHPYkJEREREREQ+iwkRERERERH5LCZERERERETks5gQERER\nERGRz2JCREREREREPosJERERERER+SwmRERERERE5LOYEBERERERkc9iQkRERERERD6LCRG5RBAE\nHM04iv6b+yP438GQvylH8L+DMWDzABy7cQyCIFR0iF7DU21VXn3gzX3tzbG5qjJuE3kOx4t03rQv\nLr2M7E0ZVPNVqP1+bQS+Hch+JDPuGrvcX9gmEx7ArY+Pj0dqampFh+GzdAYdhn09DN9c/AaF+kIY\nBaP4mVwmR6AiEL0a98L6vuvh7+dfgZFWPE+1VXn1gTf3tTfH5qrKuE3kORwv0nnTvtjeMqWxH8ld\nY9dX9xdScwaeIfIF+fnA3LlAVBQglxf/f+7c4vedLCPMnQtN1VBs7Pcl0uer8cMaI7LeBQzzgMwF\nwOz9RiC/ADsu7MCwr4d57q8NUuKtYIIgiDsfWb4as/cbkbng/9vqXeCHNUakzy/Axn5fQlM1FILE\n+O3W68Y+KLketU5tcdA2CkYU6Mqhr8srNneNKRfrKZd+9aZ5402xuIujbXJ1m60sJ8ydi39+8ULZ\n5kB59UEF97Wn9mX26g3WFs/ZP94238cLeXl2jwsH1sL9x1R3fQfwZp6Kv4Lrdfq4kJdntd6S487b\njufegmeIKrv8fKBNG+DyZaCw8K/3VSqgfn0gJaX4tcQyht8vwU9bJBYRAMhKrE6jAC5XBdqMBBAS\njP3D9yMxOrH8tykkxL3rdMHRjKPour4rkF+AlNVA/XtAoP6vz0u3nUEZAL8GDR3G76hed/WBaT0F\nugKHZYP9PdTXNrg9NneNqTLU4/F+9aZ5402xuIujbdq3D+jWzflttlGvQRmAi2E6JI4QUKC0H5rV\nOVBefeAFfe2pfZmteoO1sDqHDcoAaGNqIXbgbRTo1JKOC+Uy74EK76My8dQY84J6nTkuBPsH4Y8v\nayDo2k2LetV1aiJ24G1kytUOwyvv47mnSc0Z/ObNmzfP8+G418qVKzFq1KiKDuPB8PbbwK5d5pMD\nAPR6IC8PkMmAn3+WXEau1ZoVkZkvAX8jEFoECDLghxgD7mvvo3+T/uW/TZ07u3edLpj03SSczjyN\nGQcF9Eoz34kBlm0nNxgkxe+oXnf1gWk9Ahz/zcQgeKivbXB7bO4aU2Wox+P96k3zxpticRdH23Tk\nCHD2rPPbbKNeucGAEG3xePgx1n5oVudAefWBF/S1p/ZltuqdeQhW57DcYIAx9z60xiK0u269jNuP\nqe76DuDN89FTY8wL6nXmuJB4VYcnztyHokhnUa9p3CU72FcA5X889zSpOQPPEFV2UVFAdrb9zwWh\n7GVKyQwCqk8r/ktD/kw3n3KXsk2Zme5dpwuC/x0MtU6NzAVAlOM/yvzFQfxS6y1rH5jWI7m8J/ra\n1rrcHZu7xlQZ6vF4v3rTvPGmWNzF0TbJZMX7UXvLW9tmB/WaxoMjFuOlvPrAC/raU/syW/VKmcMy\nOHdc8Oi8l/IdwJvno6fGmBfU68xxwdGYkrqvAMr3eO5pUnMGRTnEQhUpJ8fx545yYillSonQFP9f\no9c4tZwkUrbJC2h0xdse4UwyBDiMX2q9Ze0D03okl/dEX9tal7tjc9eYKkM9Hu9Xb5o33hSLuziK\nWcp+1oV6IyQOA4vxUl594AV97al9ma16pcxhmZN/ivbovHd1bHoLT40xL6jXmeOCozEldV8BlO/x\n3FvwoQqVXUSE48/dUaaUnMDi/wcqAp1aThIp8XqBQP/ibc8JcnJBB/FLrbesfWBaj+TynuhrW+ty\nd2zuGlNlqMfj/epN88abYnEXRzHLSl8MJXF5B/XmSBwGFuOlvPrAC/raU/syW/VKmcPOHhc8Ou+9\noI/KxFPxe0G9zhwXpB47pCjP47m3YEJU2b38cvGNetaoVMDYsWUvU4pGASxLKH6MY89GPV0M3A4p\n8XqBng17Qi6TY2lCcZtIIiF+KfW6ow9M65HCY31tg9tjc9eYKkM9Hu9Xb5o33hSLuzjapg4dXNtm\nO/WaxoMjVsdLefWBF/S1p/Zltuq1N4e1/nJ8kmC/TGken/de0Edl4qn4vaBeZ44LyxKKx5c1pnEn\nRXkfz70F7yGq7CrwKXNCSBAODD/Ap8xV4FPmytIHzjyZKcjfQ31tg9tje8CeMudSv3rTvPGmWNzF\ni58yZ3UO8ClzVjmzLyvvp8x5bN4DFd5HZeIFT4PzVL3OHBeC/AOR/uXDZX7KXHkfzz2Nv0NExUJC\niifXtGnmz6WfNu2vSedEGfn013G/ihJGGZAVCPwYA2QFAQZZ8Q177/6teGIagwPRu3FvJNSU+CcJ\nd2+TF0iMTkSvxr1gDA5Em5HFbZP5/21Vsu2MMuB+FSXk01+XFL+9et3ZB6b1ODp1HqjwYF/b4PbY\n3DWmylCPx/vVm+aNN8XiLo62qUYN17bZRr3y6a9jwaJnYQx2cQ6UVx94QV97al9mq94CJczmcMl9\nfGDqr+jSorfD40K5znsv6KMy8VT8XlCvM8eFri36IDD1V6v1msadNx7PvQXPEJHTTL92vPPiTmj0\nGotfO1YpVOjduHel+7VjV3iqrcqrD7y5r705NldVxm0iz+F4kc6b9sX2limN/UjuGru+ur+QmjMw\nISKXCIKA4zeP472f38PuS7uh0WsQqAhEz0Y9MaXtFCRE+95fF2zxVFuVVx94c197c2yuqozbRJ7D\n8SKdN+2LSy+j1qmh9FMiMjgS2epsFBmK2I8kctfY9cX9BRMiIiIiIiLyWbyHiIiIiIiIyAEmRERE\nRERE5LOYEBERERERkc9iQkRERERERD6LCREREREREfksJkREREREROSzmBAREREREZHPYkJERERE\nREQ+iwkRERERERH5LCZERERERETks5gQERERERGRz2JCREREREREPosJERERERER+SwmRERERERE\n5LNcSojeffddbNq0yW4ZrVaLgQMHuhQUERERERFReXApIdJqtdBqtVY/u379OoxGI/z8/LBr164y\nBUdERERERORJCkcFJk2aBJ1OB39/f+h0OlStWhXh4eEICAhA9+7doVKpIJPJoNPpMGPGDPTo0QPX\nr1/HQw89hKCgoPLYBiIiIiIiIpc4PEP01VdfIT09HcuXL0d6ejq2bNkClUoFhUKBn376CeHh4di7\ndy9ycnKQlZWFgIAAhIWFAQAUCof5FhERERERUYVxmLGEhYVh586dePjhh7Fz507ExcWJn4WHh2PD\nhg343//+hyFDhgAA/P394efn57mIvZAgCDh24xjeO/Iedl/aDbVODaWfElFBUcjWZEOr1yLQPxA9\n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\nSFKN7wkVFxfrjTfe0Pr161VaWqo777xTf/zjHxUVFfzDEE6ns87vvNsuKiryG4N3n5Lkcrl8V5QA\nAFcWCiIAgGnTpk3TtGnTNGvWLB0/fly5ubl66qmnVFlZqR//+McqKChQhw4dtGzZMt16662SpNtu\nu03jxo3T5MmTJUl///vf5XQ6de7cOVVUVOjo0aMqLS1Vz5499fHHHys5Obne/XsLJ0maPn26brjh\nBg0ZMkQrVqzQRx99pL179+rixYv68MMPFR1d/ymv+nZq/+7+++8Pmofy8nK1aNEi6HIAgMhDQQQA\nMM3j8WjmzJmaM2eO1q5dqx/+8Ic6ePCg5s6dqzZt2ignJ0dlZWXq0qWL72Nn58+fV8+ePdW1a1dJ\n0rJlyyRJr7zyik6cOKElS5ZIkubPn1/jI3PffvutevXqpW3btqlfv3414vB+byghIUEtWrRQaWmp\nMjIyNHr0aK1YsUKjRo3Su+++G1LbUlNTlZ+fb2jZ1q1bh7RtAEDkoCACAJhSWlqqUaNGafv27Xr3\n3Xd18803S5LS09P19NNPa/78+b67rx08eFA/+MEPVFZWpvz8fF8x5M+mTZs0Y8YM3XXXXaqsrPRd\nqYmKivJ9VK60tFQej0elpaVq2bKlOnXqpFmzZql37946cOCAVqxYoeeff16SlJeXp549expu16ef\nfqrY2FjFxsYa/m7Qt99+K7fbrcrKyjrFGgAgsjk8/h7UAACAAZs2bVJKSor69++vZ599Vrm5uZo2\nbZratWun9evXa/To0Ro6dKg6d+6sVatW6cSJE+revbuOHz+uq666qsa2Zs6cqWeeeUbJycmaPXu2\ncnJy9Nvf/jZoDJ9//rmuv/56SVU3W7j++uu1fPly30f0UlNTlZubK6fTqcrKSklVxZXb7ZbT6ZTH\n41Hnzp118uRJSVJ0dLTi4uIUFxenqKgoFRUVyeVyqU2bNgHjqKioUHJysk6cOBFyHgEATYcrRAAA\n0zp06CCXy6UvvvhCL7zwgiZMmKC8vDzl5eXJ4/HoySefVN++fTV16lR5PB7t27dPycnJvo/PuVwu\nvfPOO1qwYIF27dql1NRUffnll2rXrp0yMzM1ZswY362ti4uL1aNHD+3cuVNpaWm+K0SdOnWSVPXx\nvQcffFDjxo3TrbfeqoqKCh05ckS5ubmSpMOHD+uNN95Qdna2XnvtNaWkpGjDhg3au3ev72qSVFXY\nVHfHHXeoTZs2WrVqVSNkFADQ2CiIAACmTZgwQV999ZUqKipUXl6uVatWadWqVSoqKlLr1q11+vRp\nnT9/XhMmTNCuXbv08ccfKz093fdRNI/Ho9/+9rcaNGiQ7rrrLv33f/+32rVrJ6nqo25du3ZVx44d\nJUmFhYWSpJSUFN/vqnvwwQf1pz/9Sb1799by5cvVp08fXX/99erUqZPOnDkTsB3+brstSSUlJdq2\nbZsWLFhQ753mpLrPUAIAXDn4yBwAoMFuuukmDRkyRHPnzpUkDRgwQDfddJMWLFggSbrzzjuVlJSk\nnTt36rHHHtNjjz3mWzc3N1cpKSl65ZVXNGvWLGVnZ0uShgwZonvuuUeLFy/WiRMn6nyfx+12a+vW\nrRo2bJgkac6cOTp79qwGDx6stLQ0VVZWatiwYXruueeUmZkZ8CNzvXv31hdffFGnXatXrzZ0l7kl\nS5booYceCj1xAIAmxxUiAECDrF+/Xjt27NDAgQO1detWnTlzRgcPHtR7773nW+YXv/iFbr/9diUk\nJGj8+PE11k9JSamzzbKyMu3Zs0ezZs1SYmKiXn31Vf37v/97jWUcDkeNB7P+5je/8f27tLRU27Zt\n07333qvx48crMzOzzkfmkpOT9cEHH2j//v2aP3++37aNHDky4NWlXbt2acyYMerVq1fAHAEAIhcF\nEQCgQW6++Wa9/fbb2rRpk8aPH6+vv/5aXbp00fbt23XPPffI6XSqQ4cOcjqdSklJkdvtDrrNrKws\neTweDRw4MOCd3rwPXS0vL9eRI0e0e/dubdiwQRs2bFDLli116tQp353uJKmystK3/7KyMrlcroBx\nJCUlKSkpqd7Xvbflvuaaa4K2CQAQmYI/vhsAgACSk5N17733auzYsXK5XLr//vv1k5/8RI8++qgO\nHTqktWvXavjw4frxj38sSRo+fLhOnTpVZzvl5eW+4ueNN97Q8OHD1bJlS0lVN1S4cOFCjT/Vbd68\nWf3799d//Md/qLi4WIsXL9a+fft8H43zKisr893GOyYmRpWVlXVuohCKXbt2qW3btr4bOwAArjxc\nIQIAmHbq1Cm9//77WrFihb744gs9++yzmjJlihwOh8aNG6fp06dr3bp1mjFjhqZNm6aDBw9qxIgR\n6t+/v1544QVNnDhRp0+f1h/+8Ae99957Sk1N1ZEjR7R8+XK98sorkqq+KzRlyhRNmTKlzv69xcyt\nt96qhx56SJmZmerRo0eNZS5duuT79+zZs+X96mxBQYFmz56tJUuWqEuXLobau27dOn3yySeKiopS\nbm6uVqxYodGjR5vKHQAgMlAQAQBM27x5s+bMmaOJEyfqz3/+s1q3bu17bcOGDTp37px2796tG2+8\nUZLUt29f7dmzRxMnTlSfPn0kVT0naNWqVerbt6+efPJJtWnTRpmZmRo3bpykqu8DLV++3O93iLxX\ne2JjY7VkyRK/MVYviKKja572unbtqrKyMj3yyCOG2tu2bVvNnj1biYmJ6tatm+677z7NmTPH0LoA\ngMjEXeYAABHt4sWLio+PV2xsrOXbdrlcioqKktPpNLxOcXGxWrRoYXksAICmQUEEAAAAwLa4qQIA\nAAAA26IgAgAAAGBbFEQAAAAAbIuCCAAAAIBt/X+eqOTYVmbbYQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xc0693c8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "## c. 图表展示\n",
    "x_len = range(len(X_test))\n",
    "plt.figure(figsize=(14,7), facecolor='w')\n",
    "plt.ylim(-1,11)\n",
    "plt.plot(x_len, Y_test, 'ro',markersize = 8, zorder=3, label=u'真实值')\n",
    "plt.plot(x_len, Y_predict, 'go', markersize = 12, zorder=2, label=u'预测值,$R^2$=%.3f' % lr.score(X_train, Y_train))\n",
    "plt.legend(loc = 'upper left')\n",
    "plt.xlabel(u'数据编号', fontsize=18)\n",
    "plt.ylabel(u'葡萄酒质量', fontsize=18)\n",
    "plt.title(u'葡萄酒质量预测统计', fontsize=20)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[0, 0, 0, 30, 216, 2138, 2836, 1079, 193, 5, 0]"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 查看数据分布情况\n",
    "[len(df[df.quality == i]) for i in range(11)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练数据条数:6334；数据特征个数:12；测试数据条数:163\n",
      "R值： 0.474581622987\n",
      "特征稀疏化比率：0.00%\n",
      "参数： [[  1.82941309e+00   1.65963037e+00  -4.46081057e-01   1.34636144e+00\n",
      "    1.45797403e-01  -9.13687494e-02  -2.60876953e+00   1.91178651e-01\n",
      "    9.62666712e-01  -2.63127554e-01  -9.12228692e-01   2.27692453e-01]\n",
      " [ -9.88923607e-01   3.90163227e+00  -1.95165429e+00  -2.38247679e+00\n",
      "    3.91657380e-02  -6.26076516e+00   6.16305328e-01   1.02556513e+00\n",
      "    4.03808738e+00  -1.03715892e+00   2.07672601e+00   3.20887860e+00]\n",
      " [  7.29099151e+00   1.45281795e+01  -6.20513716e+00   6.62794055e-01\n",
      "    1.63846490e+00  -1.11260833e+00  -1.04873952e+00   6.38810138e+00\n",
      "    2.38263295e+01  -7.80905933e-01  -1.51727821e+01  -7.15114734e+00]\n",
      " [  2.29455961e+00  -7.18641711e+00   2.09675192e+00   1.51842982e+00\n",
      "   -3.05988347e-01   1.82023522e+00   8.96533801e-01  -1.05951411e+00\n",
      "   -4.27572988e+00   1.42995444e+00  -3.20491021e-01   1.69787925e+00]\n",
      " [ -2.39470027e+00  -1.11294748e+01   5.55679238e+00  -1.33062199e+00\n",
      "   -1.18840841e+00   2.31248459e+00   1.01364419e+00  -5.26205623e+00\n",
      "   -1.97610323e+01   1.09759310e+00   9.63136586e+00   1.23790778e+00]\n",
      " [ -7.19747442e+00  -1.69813983e+00   9.49388639e-01   7.54224187e-01\n",
      "   -3.08746229e-01   2.56221329e+00   6.83344199e-01  -1.17094180e+00\n",
      "   -4.45325469e+00  -3.54217228e-01   5.29096034e+00   7.89979498e-01]\n",
      " [ -8.33865917e-01  -7.54103400e-02  -6.04359904e-05  -5.68710721e-01\n",
      "   -2.02850585e-02   7.69809141e-01   4.47681528e-01  -1.12333028e-01\n",
      "   -3.37066686e-01  -9.21379005e-02  -5.93550436e-01  -1.11902398e-02]]\n",
      "截距： [ 0.19076512  0.49054512  3.80045882  1.16138551 -0.10673243 -1.37066582\n",
      " -4.16575631]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nsGfPHkRERNh9HTKZDGGhYRiwfQB2XtmJVG2q0ahzcpkcSmclutXohrDQMOm5l7wwBEMG7u7uec7T\nHCcnJ+kWOyIiIiIislyBvpjVcHuV4dasJk2a4NChQ0bPF9mTi5ML1r+5HgcHHsRbQW/Bw8UDcpkc\nHi4e6FGrB8IHhmPDWxvg4uSSL+snIiIiIqLCpVD0EAHP79YsmUyGRuUaYWPPjfm+LiIiIiIiKtwK\ntIeIiIiIiIioIBWrgCjzi0+paOI2JCIiIqLnqdgEREqlEo8fP+YFdREmhMDjx4+hVCoLuihERERE\n5CAKzTNEeVW+fHnExsbi0aNHBV0UygOlUony5csXdDGIiIiIyEEUm4DIxcXF5OWkREREREREOSk2\nt8wRERERERFZiwERERERERE5LAZERERERETksBgQERERERGRw2JAREREREREDosBEREREREROSwG\nRERERERE5LAYEBERERERkcNiQERERERERA6LARERERERETksBkREREREROSwGBAREREREZHDYkBE\nREREREQOiwERERERERE5LAZERERERETksBgQERERERGRw2JAREREREREDosBEREREREROSwGRERE\nRERE5LAYEBERERERkcNiQERERERERA6LARERERERETksBkREREREROSwGBAREREREZHDYkBERERE\nREQOiwERERERERE5LAZERERERETksBgQERERERGRw2JAREREREREDosBEREREREROSwGRERERERE\n5LAYEBERERERkcNiQERERERERA6LARERERERETksBkREREREROSwGBAREREREZHDYkBEREREREQO\niwERERERERE5LAZERERERETksBgQERERERGRw2JAREREREREDosBEREREREROSwGRERERERE5LAY\nEBERERERkcNiQERERERERA6LARERERERETksBkREREREROSwGBAVpORkYMYMwN8fkMsz/p0xI2M6\nERUPPM4pv9lrH+O+aju2HRVnDrB/y4QQoqAL8fTpU/Tr1w9JSUmoXbs2li5dmmP64OBgREVFPafS\n5ZPkZKBJEyAmBkhL+2+6UglUqQJERACengVXPiLKOx7nlN/stY9xX7Ud246KsyK+f1saMxSKHqK1\na9eif//+OHLkCJKSkop+sGOJefNMdy4g43NMTMZ8IiraeJxTfrPXPsZ91XZsOyrOHGT/LhQ9ROvW\n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\nRERERA6LARERERERETksBkREREREROSwGBAREREREZHDYkBEREREREQOiwERERERERE5LAZERERE\nRETksBgQERERERGRw2JAREREREREDosBEREREREROSwGRERERERE5LAYEBERERERkcNiQERERERE\nRA6LARERERERETksmwKiuXPnYuPGjTmmUavV6N27t02FIiIiIiIieh5sCojUajXUarXZeXfu3IFe\nr4eTkxN27dqVp8IRERERERHlJ+fcEkyYMAEajQYuLi7QaDQoWbIkfHx84Orqig4dOkCpVEImk0Gj\n0eCTTz5Bp06dcOfOHbzwwgtwd3d/HnUgIiIiIiKySa49RL/99htu3ryJpUuX4ubNm9i8eTOUSiWc\nnZ3x999/w8fHB/v27cPjx4/x6NEjuLq6wtvbGwDg7JxrvEVERERERFRgco1YvL29sXPnTrz44ovY\nuXMngoKCpHk+Pj5Yu3Yt/vzzT/Tv3x8A4OLiAicnp/wrcSEghMCJuyfwzbFvsPvqbqg0KiicFPB3\n90d8ajzStGlGn9VaNdxc3NClWhdMajYJDcs2BIAc81Br1VA6K9G0fFMAQMTdCJvSmCuLJfnao7yp\nmlSjfIJfDEbkvUgpj1RNaoHWMT/aIb/KYku+tuyHWbeZpdu+oPItbMfN89qO+bV/y2SyfDn/Pa86\nWnLOsaTOWetoyXL50S6F7Riw5TgvqH0qv77HbNn2RW075tf5xNxx9byuYeyxHxb264aCvOaypb0L\nG5kQQuSUoFatWvj3339RtmxZ3Lt3D0FBQRg7dixKly6NsWPH4t69e/D398e0adNQrlw5jBw5EnFx\ncQAgLWNvwcHBiIqKsnu+ltDoNBiwfQB+v/I70rRp0Au9xcvKZXK4ObuhS/UukEGGndE7rc7jebJX\neeUyOZROSvh5+CFeFV+o62xOUdtuubGkPrbUuSDzJdsZ2rdrja4ICw2Di5NLtmnzcv57nnI75+RU\n55zqmN1y+d0uhekYsOY4Lwz7lD2/x/K67YvadsxLvs/7GLGmLObYu3wFua0L6prLmvZ+niyNGRgQ\nWUEIgb5b++L3K79DlqzCpH+A0ZGArwp47AZcLAXUiQNeSDXz2R1Y3BD4phmQpszoQdMJXa7r9FAj\n5/W4AyvqAxDA0NPZpzGsO0WRTb5m0hg4yexYXhvLb5Imh/Ja03bWtIthuynTdDm2nTVtm2N5bcjX\n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\ncovKysp00kknaeHChbr44oslSZdcconGjRunyZMnS5L+93//Vw6HQ0eOHFFdXZ127dql6upq9evX\nT//4xz+Unp7e4vY9hZMkPfbYYzr33HM1bNgwLV68WB9//LG2bt2q48eP68MPP1RcXMuHvMbt+P7u\npptuMsxDbW2tOnXqZPg8AED0oSACAITM7XbriSee0IwZM7RixQpdccUV2r59u2bOnKmuXbuqqKhI\nNTU1ys7O9n7srLS0VP369dMpp5wiSVq4cKEk6ZVXXtHevXs1f/58SdKLL77Y5CNzhw4dUv/+/bVu\n3TqdeeaZTeLwfG8oOTlZnTp1UnV1tfLy8nTttddq8eLFuuaaa/Tuu+8G1besrCwdPXrU1HO7dOkS\nVNsAgOhBQQQACEl1dbWuueYarV+/Xu+++64uvPBCSVJubq4efvhhvfjii96rr23fvl2XXXaZampq\ndPToUW8x5M/q1av1+OOP6+qrr1Z9fb33TI3dbvd+VK66ulput1vV1dXq3LmzevTooWnTpmnAgAH6\n8ssvtXjxYj3zzDOSpJKSEvXr1890vzZt2qSEhAQlJCSY/m7QoUOH5HK5VF9f36xYAwBEN5vb340a\nAAAwYfXq1crMzNRZZ52lp556SsXFxXrkkUeUkZGhlStX6tprr9Xw4cPVs2dPLV26VHv37lWfPn20\nZ88e9e7du0lbTzzxhJ588kmlp6dr+vTpKioq0qOPPmoYw5YtW3TOOedIarjYwjnnnKNFixZ5P6KX\nlZWl4uJiORwO1dfXS2oorlwulxwOh9xut3r27Kl9+/ZJkuLi4pSYmKjExETZ7XZVVFTI6XSqa9eu\nAeOoq6tTenq69u7dG3QeAQBthzNEAICQnXTSSXI6nfrqq6/07LPPasKECSopKVFJSYncbrcefPBB\nDRo0SFOnTpXb7dYXX3yh9PR078fnnE6nli9frtmzZ2vDhg3KysrSN998o4yMDOXn5+u6667zXtq6\nsrJSffv21WeffaacnBzvGaIePXpIavj43u23365x48bp4osvVl1dnXbu3Kni4mJJ0o4dO/TGG2+o\nsLBQr732mjIzM7Vq1Spt3brVezZJaihsGrv88svVtWtXLV26tBUyCgBobRREAICQTZgwQd9++63q\n6upUW1urpUuXaunSpaqoqFCXLl104MABlZaWasKECdqwYYP+8Y9/KDc31/tRNLfbrUcffVRDhw7V\n1VdfrT/84Q/KyMiQ1PBRt1NOOUUnn3yyJKm8vFySlJmZ6f1dY7fffrvefvttDRgwQIsWLdLAgQN1\nzjnnqEePHjp48GDAfvi77LYkVVVVad26dZo9e3aLV5qTmt9DCQDQfvCROQBA2C644AINGzZMM2fO\nlCQNHjxYF1xwgWbPni1Juuqqq5SamqrPPvtM99xzj+655x7va4uLi5WZmalXXnlF06ZNU2FhoSRp\n2LBhGjt2rObNm6e9e/c2+z6Py+XSJ598ohEjRkiSZsyYocOHD+v8889XTk6O6uvrNWLECD399NPK\nz88P+JG5AQMG6KuvvmrWr2XLlpm6ytz8+fN1xx13BJ84AECb4wwRACAsK1eu1KeffqohQ4bok08+\n0cGDB7V9+3a999573uf85je/0aWXXqrk5GSNHz++yeszMzObtVlTU6PNmzdr2rRpSklJ0auvvqr/\n+I//aPIcm83W5MasDzzwgPff1dXVWrdunW644QaNHz9e+fn5zT4yl56err/+9a/atm2bXnzxRb99\nGz16dMCzSxs2bNB1112n/v37B8wRACB6URABAMJy4YUX6q233tLq1as1fvx4fffdd8rOztb69es1\nduxYORwOnXTSSXI4HMrMzJTL5TJss6CgQG63W0OGDAl4pTfPTVdra2u1c+dObdy4UatWrdKqVavU\nuXNn7d+/33ulO0mqr6/3br+mpkZOpzNgHKmpqUpNTW3xcc9luU8//XTDPgEAopPx7bsBAAggPT1d\nN9xwg8aMGSOn06mbbrpJv/zlL3X33Xfr66+/1ooVKzRy5EjdcsstkqSRI0dq//79zdqpra31Fj9v\nvPGGRo4cqc6dO0tquKDCsWPHmvxpbM2aNTrrrLP0n//5n6qsrNS8efP0xRdfeD8a51FTU+O9jHd8\nfLzq6+ubXUQhGBs2bFC3bt28F3YAALQ/nCECAIRs//79+uCDD7R48WJ99dVXeuqppzRlyhTZbDaN\nGzdOjz32mN5//309/vjjeuSRR7R9+3aNGjVKZ511lp599llNnDhRBw4c0Msvv6z33ntPWVlZ2rlz\npxYtWqRXXnlFUsN3haZMmaIpU6Y0276nmLn44ot1xx13KD8/X3379m3ynBMnTnj/PX36dHm+OltW\nVqbp06dr/vz5ys7ONtXf999/X59//rnsdruKi4u1ePFiXXvttSHlDgAQHSiIAAAhW7NmjWbMmKGJ\nEyfqz3/+s7p06eJ9bNWqVTpy5Ig2btyo8847T5I0aNAgbd68WRMnTtTAgQMlNdwnaOnSpRo0aJAe\nfPBBde3aVfn5+Ro3bpykhu8DLVq0yO93iDxnexISEjR//ny/MTYuiOLimh72TjnlFNXU1Oiuu+4y\n1d9u3bpp+vTpSklJUa9evXTjjTdqxowZpl4LAIhOXGUOABDVjh8/rqSkJCUkJFjettPplN1ul8Ph\nMP2ayspKderUyfJYAABtg4IIAAAAQMziogoAAAAAYhYFEQAAAICYRUEEAAAAIGZREAEAAACIWf8f\nsqWDPYnT+OEAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xdf55a90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "### 对数据进行降维处理后建模，查看效果：使用PCA讲维（有时候进行特征抽取和数据降维对于模型的算法是没有太好的改进的）\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "from sklearn.decomposition import PCA\n",
    "from sklearn.feature_selection import SelectKBest\n",
    "from sklearn.feature_selection import chi2\n",
    "from sklearn.preprocessing import Normalizer\n",
    "\n",
    "## 数据分割\n",
    "X1_train,X1_test,Y1_train,Y1_test = train_test_split(X,Y,test_size=0.025,random_state=0)\n",
    "print \"训练数据条数:%d；数据特征个数:%d；测试数据条数:%d\" % (X1_train.shape[0], X1_train.shape[1], X1_test.shape[0])\n",
    "\n",
    "## 数据特征转换(归一化)\n",
    "## 数据格式化(归一化)\n",
    "ss2 = Normalizer()\n",
    "X1_train = ss2.fit_transform(X1_train) ## 训练模型及归一化数据\n",
    "\n",
    "## 特征选择\n",
    "#skb = SelectKBest(chi2, k=10) ## 只考虑3个维度\n",
    "#X1_train = skb.fit_transform(X1_train, Y1_train) ## 训练模型及特征选择\n",
    "\n",
    "## 降维\n",
    "#pca = PCA(n_components=5) ## 将样本数据维度降低成为5个维度\n",
    "#X1_train = pca.fit_transform(X1_train)\n",
    "#print \"贡献率:\", pca.explained_variance_\n",
    "\n",
    "\n",
    "## 模型构建\n",
    "lr2 = LogisticRegressionCV(fit_intercept=True, Cs=np.logspace(-5, 1, 100), \n",
    "                          multi_class='multinomial', penalty='l2', solver='lbfgs')\n",
    "lr2.fit(X1_train, Y1_train)\n",
    "\n",
    "## 模型效果输出\n",
    "r = lr2.score(X1_train, Y1_train)\n",
    "print \"R值：\", r\n",
    "print \"特征稀疏化比率：%.2f%%\" % (np.mean(lr2.coef_.ravel() == 0) * 100)\n",
    "print \"参数：\",lr2.coef_\n",
    "print \"截距：\",lr2.intercept_\n",
    "\n",
    "## 数据预测\n",
    "## a. 预测数据格式化(归一化)\n",
    "X1_test = ss2.transform(X1_test) ## 测试数据归一化\n",
    "#X1_test = skb.transform(X1_test) ## 测试数据特征选择\n",
    "#X1_test = pca.fit_transform(X1_test) ## 测试数据降维\n",
    "\n",
    "## b. 结果数据预测\n",
    "Y1_predict = lr2.predict(X1_test)\n",
    "\n",
    "## 图表展示\n",
    "## c. 图表展示\n",
    "x1_len = range(len(X1_test))\n",
    "plt.figure(figsize=(14,7), facecolor='w')\n",
    "plt.ylim(-1,11)\n",
    "plt.plot(x1_len, Y1_test, 'ro',markersize = 8, zorder=3, label=u'真实值')\n",
    "plt.plot(x1_len, Y1_predict, 'go', markersize = 12, zorder=2, label=u'预测值,$R^2$=%.3f' % lr2.score(X1_train, Y1_train))\n",
    "plt.legend(loc = 'upper left')\n",
    "plt.xlabel(u'数据编号', fontsize=18)\n",
    "plt.ylabel(u'葡萄酒质量', fontsize=18)\n",
    "plt.title(u'葡萄酒质量预测统计(降维处理)', fontsize=20)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "原始数据AUC值: 0.895122134819\n",
      "降维数据AUC值: 0.871761576775\n"
     ]
    }
   ],
   "source": [
    "### 从auc角度看效果===>效果不错\n",
    "from sklearn.preprocessing import label_binarize\n",
    "from sklearn import metrics\n",
    "y_test_hot = label_binarize(Y_test,classes=(3,4,5,6,7,8,9)).ravel()\n",
    "\n",
    "### 计算原始数据模型\n",
    "## 得到预测的损失值\n",
    "lr_y_score = lr.decision_function(X_test).ravel()\n",
    "## 计算roc的值\n",
    "lr_fpr, lr_tpr, lr_threasholds = metrics.roc_curve(y_test_hot,lr_y_score)\n",
    "## 计算auc的值\n",
    "lr_auc = metrics.auc(lr_fpr, lr_tpr)\n",
    "\n",
    "## 计算降维后的数据模型\n",
    "lr2_y_score = lr2.decision_function(X1_test).ravel()\n",
    "## 计算roc的值\n",
    "lr2_fpr, lr2_tpr, lr2_threasholds = metrics.roc_curve(y_test_hot,lr2_y_score)\n",
    "## 计算auc的值\n",
    "lr2_auc = metrics.auc(lr2_fpr, lr2_tpr)\n",
    "\n",
    "print \"原始数据AUC值:\", lr_auc\n",
    "print \"降维数据AUC值:\", lr2_auc\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [conda root]",
   "language": "python",
   "name": "conda-root-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
